In the data storage industry, snapshots have become a preferred method of protecting a data storage volume against inadvertent data loss and for performing background backups. A snapshot is a read-only volume that is a point-in-time image of a data storage volume that can be created, mounted, deleted, and rolled back onto the data storage volume arbitrarily. Snapshots are utilized extensively in the data storage industry for security, backup, and archival purposes.
Snapshots are typically implemented in the data storage industry utilizing a technology called copy-on-write (“COW”). When a snapshot is taken utilizing a COW algorithm and a new write arrives at a logical location at which data was written before the snapshot, a copy is made of the old data at a new location before the new data is written to the old location. Some metadata is also written to keep track of the fact that the old data has been copied to a new location.
One major drawback of the existing methods for performing snapshots is that the required input/output operations impose significant performance penalties when snapshots are currently active. This is because snapshots implemented utilizing the COW algorithm must perform three input/output operations for each new read/write request that arrives to the system: 1) a read from the original location of the old data; 2) a write to a snapshot location for the old data; and 3) a write to the original location for the new data. Two of these input/output operations are to the same location, thereby increasing rotational latency. Additionally, a number of sparse metadata writes must be performed in both cases. The combination of the rotational delay due to the double I/O at the same location and the overall delay results in performance penalties of a factor of at least twenty for each snapshot taken in some contemporary implementations. If multiple snapshots are active, most contemporary systems exhibit such severe performance degradation that taking more than four or five concurrent snapshots becomes impractical.
In addition to the significant performance penalties, current systems for taking snapshots in a data storage system are also limited in the features they provide. For instance, current systems do not allow the arbitrary creation of snapshots with effectively imperceptible delay imposed between the creation of snapshots, do not allow users to quickly delete snapshots to reclaim space without effecting newer or older snapshots and without contributing perceptibly to the input/output load of the system, and do not permit snapshots to be “rolled back” to any earlier snapshot without making the system unavailable for a length of time, or even having to take the system down entirely. Current systems also do not support the mounting of arbitrary snapshots or the creation of “writable snapshots,” which are branches off of any snapshot and that share data with the parent snapshot but not necessarily with the parent volume.
It is with respect to these considerations and others that the present invention has been made.